using UnityEngine;

namespace Share
{
    /// <summary>
    /// 对象池单元组件，自动管理对象返回池子
    /// </summary>
    public class ObjectPoolItem : MonoBehaviour
    {
        private bool m_IsReturningToPool = false;

        private void OnDisable()
        {
            // 检查对象是否已经在对象池中，避免重复调用ReturnObject
            if (!m_IsReturningToPool && ObjectPoolManager.Instance != null &&
                !ObjectPoolManager.Instance.IsPooledObject(base.gameObject))
            {
                m_IsReturningToPool = true;
                // 使用ObjectPoolManager的实例来启动协程，避免在非激活对象上启动协程
                ObjectPoolManager.Instance.StartCoroutine(ReturnToPoolNextFrame());
            }
        }

        private System.Collections.IEnumerator ReturnToPoolNextFrame()
        {
            yield return null;

            // 在yield return null之后再次检查GameObject是否仍然有效
            // 防止在等待期间GameObject被销毁的情况
            // 使用try-catch来安全地处理可能出现的MissingReferenceException
            try
            {
                if (ObjectPoolManager.Instance != null && this != null)
                {
                    ObjectPoolManager.Instance.ReturnObject(base.gameObject);
                }
            }
            catch (System.Exception ex)
            {
                // 如果出现异常（如MissingReferenceException），记录日志但不中断程序
                UnityEngine.Debug.LogWarning($"ReturnToPoolNextFrame encountered an exception: {ex.Message}");
            }

            m_IsReturningToPool = false;
        }

    }
}
